package cn.demoncat.util.word.entity;

import cn.demoncat.util.word.constant.WordGenConstant;

import java.util.ArrayList;
import java.util.List;

/**
 * Word文档 - 内容 - 段落 - 数据
 *
 * @author 延晓磊
 * @since 2021年04月10日
 */
public class WordRun {

    /**
     * 数据类型
     *
     * 1、默认WordGenConstant.RunType.TEXT
     * 2、多条数据的主内容忽略
     */
    private String type = WordGenConstant.RunType.TEXT;
    /**
     * 单条数据
     *
     * 1、主数据中与datas二选一
     * 2、子数据中必须
     *
     * 断点：断点类型
     * 文本：文本内容
     */
    private String data;
    /**
     * 多条数据（子数据）
     *
     * 1、主数据中优先于data
     * 2、子数据中忽略，即只在主数据中支持多条数据
     * 3、不会新建XWPFRun，用于相同样式的多个数据片段
     */
    private List<WordRun> datas;
    /**
     * 数据链接
     *
     * 1、主数据设置时，设置到XWPFRun
     * 2、子数据中忽略
     */
    private String url;
    /**
     * 数据样式
     *
     * 1、主数据设置时，设置到XWPFRun
     * 2、子数据中忽略
     */
    private WordRunStyle style;

    /**
     * 实例 - 换行
     */
    public static final WordRun INSTANCE_BREAK_LINE = instanceByBreakLine();
    /**
     * 实例 - 换页
     */
    public static final WordRun INSTANCE_BREAK_PAGE = instanceByBreakPage();
    /**
     * 实例 - 制表符
     */
    public static final WordRun INSTANCE_BREAK_TAB = instanceByBreakTab();

    /**
     * 添加子数据
     *
     * @param run
     *
     * @return 子数据
     *
     * @author 延晓磊
     * @since 2021年04月12日
     */
    public WordRun addData(WordRun run){
        if (this.getDatas() == null) {
            this.setDatas(new ArrayList<>());
        }
        this.getDatas().add(run);
        return run;
    }

    /**
     * 添加子数据
     *
     * @return 子数据
     *
     * @author 延晓磊
     * @since 2021年04月12日
     */
    public WordRun addData(){
        return addData(new WordRun());
    }

    /**
     * 添加子数据 - 换行
     *
     * @return 当前主数据
     *
     * @author 延晓磊
     * @since 2021年04月12日
     */
    public WordRun addLine(){
        addData(WordRun.INSTANCE_BREAK_LINE);
        return this;
    }

    /**
     * 添加数据 - 换页
     *
     * @return 当前主数据
     *
     * @author 延晓磊
     * @since 2021年04月12日
     */
    public WordRun addPage(){
        addData(WordRun.INSTANCE_BREAK_PAGE);
        return this;
    }

    /**
     * 添加数据 - 制表符
     *
     * @return 当前主数据
     *
     * @author 延晓磊
     * @since 2021年04月12日
     */
    public WordRun addTab(){
        addData(WordRun.INSTANCE_BREAK_TAB);
        return this;
    }

    /**
     * 创建实例 - 换行
     *
     * @return
     *
     * @author 延晓磊
     * @since 2021年04月10日
     */
    private static WordRun instanceByBreakLine(){
        WordRun run = new WordRun();
        run.setType(WordGenConstant.RunType.BREAK);
        run.setData(WordGenConstant.RunBreak.LINE);
        return run;
    }
    /**
     * 创建实例 - 换页
     *
     * @return
     *
     * @author 延晓磊
     * @since 2021年04月10日
     */
    private static WordRun instanceByBreakPage(){
        WordRun run = new WordRun();
        run.setType(WordGenConstant.RunType.BREAK);
        run.setData(WordGenConstant.RunBreak.PAGE);
        return run;
    }
    /**
     * 创建实例 - 制表符
     *
     * @return
     *
     * @author 延晓磊
     * @since 2021年04月10日
     */
    private static WordRun instanceByBreakTab(){
        WordRun run = new WordRun();
        run.setType(WordGenConstant.RunType.BREAK);
        run.setData(WordGenConstant.RunBreak.TAB);
        return run;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public List<WordRun> getDatas() {
        return datas;
    }

    public void setDatas(List<WordRun> datas) {
        this.datas = datas;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public WordRunStyle getStyle() {
        return style;
    }

    public void setStyle(WordRunStyle style) {
        this.style = style;
    }
}
